<?php

class UsuariosController extends AppController {

    var $name = 'Usuarios';
    var $uses = array('Usuario', 'UsuarioPunto', 'TiendaLocal');
    var $components = array('Utilitario', 'Interfaz', 'Vista', 'Maestro');
    var $helpers = array('Html', 'Ajax', 'Javascript', 'Vista', 'Interfaz');
    var $layout = "ajax";

    function beforeFilter() {
        $this->validar();
    }

    function index($busq = null) {
        //$this->permisos_menu_individual('LISTADO DE USUARIOS'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $this->bloquear_buscador();
        $this->Vista->title("Permisos - Permisos por Usuario");
        if (isset($this->request->data)) {
            extract($this->request->data);
            $condiciones = array();
            if (!empty($tienda_id)) {
                $data = $this->UsuarioPunto->find('all', array('fields' => array('UsuarioPunto.usuario_id'), 'conditions' => array('UsuarioPunto.estatus' => 1, 'UsuarioPunto.punto_id' => $tienda_id)));
                $ids = array();
                $ids[] = 0;
                foreach ($data as $valor) {
                    $ids[] = $valor['UsuarioPunto']['usuario_id'];
                }
                $condiciones['Usuario.id'] = $ids;
            }
            if (!empty($cedula))
                $condiciones['Funcionario.cedula ilike '] = "%$cedula%";
            if (!empty($nombre))
                $condiciones['Funcionario.nombre ilike '] = "$nombre%";
            if (!empty($usuario))
                $condiciones['Usuario.usuario ilike '] = "$usuario%";

            $data = $this->Usuario->find('all', array(
                'fields' => array('Usuario.id', 'Usuario.usuario', 'Funcionario.nombre', 'Funcionario.apellido', 'Funcionario.cedula', 'Funcionario.fecha_nacimiento', 'Funcionario.sexo', 'Funcionario.correo', 'Funcionario.celular', 'Funcionario.ficha'),
                'conditions' => $condiciones, 'order' => 'Funcionario.nombre, Funcionario.apellido, Funcionario.cedula'));

            if (isset($vent_filtro) && count($data) > 0)
                $this->Vista->cerrar_ventana($vent_filtro);
        }
        else {

            $data = $this->Usuario->find('all', array(
                'fields' => array('Usuario.id', 'Usuario.usuario', 'Funcionario.nombre', 'Funcionario.apellido', 'Funcionario.cedula', 'Funcionario.fecha_nacimiento', 'Funcionario.sexo', 'Funcionario.correo', 'Funcionario.celular', 'Funcionario.ficha'),
                'conditions' => array('Usuario.estatus' => 1), 'order' => 'Funcionario.nombre, Funcionario.apellido, Funcionario.cedula'));
        }

        $this->set('data', $data);
        $this->set('busq', $busq);
    }

    public function filtro() {
        //$this->permisos_menu_individual('LISTADO DE USUARIOS'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA    
        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
        $this->set('listaTiendas', $listaTiendas);
    }

    public function nuevo() {
        //$this->permisos_accion_individual('LISTADO DE USUARIOS', 'nuevo'); // mensaje que se quiere mostrar
        $this->set('lista_sexo', $this->Utilitario->lista_sexo('L'));
        $this->set('lista_cod_celular', $this->Utilitario->lista_cod_celular());
        $this->set('lista_tienda', $this->Utilitario->lista_tienda());
        $this->set('tipo_usuario', $this->Interfaz->id($this->Session->read('tipo_usuario')));
    }

    public function buscador_funcionarios() {
        $this->set('div', 'cedula');
        $this->set('divlistado', DOCULTO);
    }

    public function listado_buscador_funcionarios($vent = null, $div = null, $para = null) {
        if (isset($para) && !empty($para)) {
            $this->set('data', $this->Funcionario->find('all', array('conditions' => array("OR" => array('Funcionario.nombre ilike' => "%$para%", 'Funcionario.apellido ilike' => "%$para%", 'Funcionario.cedula ilike' => "%$para%", 'Funcionario.ficha ilike' => "%$para%")), 'order' => 'Funcionario.nombre, Funcionario.apellido')));
            $this->set('busq', $para);
        } else {
            $this->set('data', null);
            $this->set('busq', '');
        }
        echo "<script type='text/javascript'>document.getElementById('$div').style.display='block';</script>";
        $this->set('vent', $vent);
    }

    public function seleccionar_funcionario($vent = null, $id_funcio = null) {
        if (isset($vent) && isset($id_funcio)) {
            $id = $this->Interfaz->id($id_funcio);
            $d = $this->Funcionario->find('first', array('conditions' => array("Funcionario.id" => $id)));
            $u = $this->Usuario->find('first', array('conditions' => array("Usuario.funcionario_id" => $id)));
            if (empty($u)) {
                echo "<script type='text/javascript'>
                    document.getElementById('funcionario_id').value='" . $d['Funcionario']['id'] . "';
                    document.getElementById('cedula').value='" . $d['Funcionario']['cedula'] . "';
                    document.getElementById('nombre').value='" . $d['Funcionario']['nombre'] . "';
                    document.getElementById('apellido').value='" . $d['Funcionario']['apellido'] . "';
                    document.getElementById('sexo').value='" . $d['Funcionario']['sexo'] . "';
                    document.getElementById('ficha').value='" . $d['Funcionario']['ficha'] . "';
                    document.getElementById('correo').value='" . $d['Funcionario']['correo'] . "';
                    document.getElementById('celular').value='" . $d['Funcionario']['celular'] . "';
                    document.getElementById('telefono').value='" . $d['Funcionario']['telefonoresidencial'] . "';
                    document.getElementById('fecha_i_cal_').value='" . $this->Utilitario->ver_fecha($d['Funcionario']['fecha_nacimiento']) . "';
                </script>";
                $this->Vista->cerrar_ventana($vent);
            } else {
                $this->Vista->mensaje('Esta Funcionario ya tiene un Usuario Asignado!!!', 'ERROR');
            }
        }
        $this->render("../" . PRINCIPAL . "/mensajes");
    }

    function guardar() {
        extract($this->request->data);
        $ff = $this->request->data['fecha'];
        $ff = $$ff;
        $data = $this->Interfaz->data($this->request->data);
        $rep = 0;
        if ($this->Vista->empyt($data, array('telefono', 'correo', 'clave', 'repclave', 'busca_funcionario_em'))) {
            $this->Vista->mensaje('Faltan Datos que son Requeridos', 'ALERTA');
        } else if ($this->Vista->correo($data['correo'], 'correo')) {
            $this->Vista->mensaje('Correo Electronico Invalido', 'ERROR');
        } else if ($this->Vista->celular($data['celular'], 'celular')) {
            $this->Vista->mensaje('Numero Celular Invalido', 'ERROR');
        } else if ($this->Vista->telefono($data['telefono'], 'telefono')) {
            $this->Vista->mensaje('Numero de Telefono Residencial Invalido', 'ERROR');
        } else if ($this->Vista->checkdate($data['fecha_i_cal_'], 'fecha_i_cal_')) {
            $this->Vista->mensaje('LA FECHA DE NACIMIENTO PROPORCIONADA NO ES VALIDA', 'ERROR', 'fecha');
        } else if ($this->Vista->verifica('Funcionario', 'cedula', $data['cedula'], 'cedula') && $data['funcionario_id'] == 0) {
            $this->Vista->mensaje('Esta Cedula ya se encuentra registrada', 'ERROR', 'cedula');
        } else if ($this->Vista->verifica('Usuario', 'funcionario_id', $data['funcionario_id'], 'cedula')) {
            $this->Vista->mensaje('El Funcionario ya Posee Usuario Registrado', 'ERROR', 'cedula');
        } else if ($this->Vista->verifica('Usuario', 'usuario', $data['usuario'], 'usuario')) {
            $this->Vista->mensaje('Esta Usuario ya se encuentra registrado', 'ERROR', 'usuario');
        } else if ($this->Vista->verifica('Funcionario', 'celular', $data['celular'], 'celular') && $data['funcionario_id'] == 0) {
            $this->Vista->mensaje('Esta Celular ya se encuentra registrado', 'ERROR', 'celular');
        } else if ((isset($data['clave']) or isset($data['repclave'])) and $data['clave'] != $data['repclave']) {
            $this->Vista->mensaje('Esta Clave es Erronea por favor verifique', 'ERROR');
            $this->Vista->monta_imagem('clave', 'Error en clave');
            $this->Vista->monta_imagem('repclave', 'Error en clave');
            $rep = 1;
        } else {
            if ($rep == 0) {
                $cla = explode('-', $data['cedula']);
                $clave = $cla[1];
            } else {
                $clave = $data['clave'];
            }
            $this->Usuario->query('BEGIN  WORK');
            if (isset($data['funcionario_id']) && $data['funcionario_id'] > 0) {
                $id_fun = $data['funcionario_id'];
            } else {

                $d['Funcionario']['nombre'] = $data['nombre'];
                $d['Funcionario']['apellido'] = $data['apellido'];
                $d['Funcionario']['cedula'] = $data['cedula'];
                $d['Funcionario']['fecha_nacimiento'] = $this->Utilitario->guar_fecha($ff);
                $d['Funcionario']['sexo'] = $data['sexo'];
                $d['Funcionario']['correo'] = $data['correo'];
                $d['Funcionario']['celular'] = $data['celular'];
                $d['Funcionario']['telefonoresidencial'] = $data['telefono'];
                $d['Funcionario']['ficha'] = $data['ficha'];
                $d['Funcionario']['tienda_id'] = $data['tienda_id'];
                $d['Funcionario']['estatus'] = 1;
                if ($this->Funcionario->save($d)) {
                    $id_fun = $this->Funcionario->id;
                } else {
                    $id_fun = 0;
                }
            }
            if ($id_fun > 0) {
                $d = null;
                $d['Usuario']['conectado'] = '0';
                $d['Usuario']['funcionario_id'] = $id_fun;
                $d['Usuario']['contrasena'] = $this->Utilitario->con_clave($clave);
                $d['Usuario']['estatus'] = 1;
                $d['Usuario']['tienda_id'] = $data['tienda_id'];
                $d['Usuario']['tipo_usuario_id'] = 5;
                $d['Usuario']['usuario'] = $data['usuario'];

                if ($this->Usuario->save($d)) {
                    $this->Vista->mensaje('Usuario Registrado Exitosamente', 'EXITO');
                    $this->Usuario->query('COMMIT');
                    $this->log();
                    $this->Vista->cerrar_ventana($vent_filtro);
                } else {
                    $this->log();
                    $this->Vista->mensaje('Ocurrio un Error Verificar Logs', 'ERROR');
                    $this->Usuario->query('ROLLBACK');
                }
            } else {
                $this->log();
                $this->Vista->mensaje('Ocurrio un Error Verificar Logs', 'ERROR');
                $this->Usuario->query('ROLLBACK');
            }
        }
        $this->index($data['usuario']);
        $this->render('index');
    }

   public function micuenta() {
        $id_limpio = $this->Interfaz->id($this->Session->read('usuario_id'));
        $this->set('data', $this->Usuario->find('first', array('conditions' => array("Usuario.id" => $id_limpio, "Usuario.estatus" => 1))));
        $this->set('div', $div);
        $this->set('tip', $tip);
        $this->set('divlistado', $divlistado);
        $this->set('lista_sexo', $this->Utilitario->lista_sexo('L'));
        $this->set('lista_cod_celular', $this->Utilitario->lista_cod_celular());
    }

    public function guardarmodificar() {
        extract($this->request->data);

        $ff = $this->request->data['fecha'];
        $ff = $$ff;
        $id_fun = $this->Interfaz->id($this->request->data['funcionario_id']);
        $data = $this->Interfaz->data($this->request->data);
        $id = $this->Interfaz->id($data['id']);
        $id_vent = $data['id_vent'];

        $rep = 0;
        if ($this->Vista->empyt($data, array('telefono'))) {
            $this->Vista->mensaje('Faltan Datos que son Requeridos', 'ALERTA');
        }
        else if ($this->Vista->correo($data['correo'], 'correo')) {
            $this->Vista->mensaje('Correo Electronico Invalido', 'ERROR');
        } else if ($this->Vista->celular($data['celular'], 'celular')) {
            $this->Vista->mensaje('Numero Celular Invalido', 'ERROR');
        } else if ($this->Vista->telefono($data['telefono'], 'telefono')) {
            $this->Vista->mensaje('Numero de Telefono Residencial Invalido', 'ERROR');
        } else if ($this->Vista->checkdate($ff, 'fecha_i_cal_')) {
            $this->Vista->mensaje('LA FECHA DE NACIMIENTO PROPORCIONADA NO ES VALIDA', 'ERROR', 'fecha');
        } else if ($this->Vista->verifica('Funcionario', 'cedula', $data['cedula'], 'cedula', $id_fun)) {
            $this->Vista->mensaje('Esta Cedula ya se encuentra registrada', 'ERROR', 'cedula');
        } else if ($this->Vista->verifica('Usuario', 'funcionario_id', $id_fun, 'cedula', $id)) {
            $this->Vista->mensaje('El Funcionario ya Posee Usuario Registrado', 'ERROR', 'cedula');
        } else if ($this->Vista->verifica('Usuario', 'usuario', $data['usuario'], 'usuario', $id)) {
            $this->Vista->mensaje('Esta Usuario ya se encuentra registrado', 'ERROR', 'usuario');
        } else if ($this->Vista->verifica('Funcionario', 'celular', $data['celular'], 'celular', $id_fun)) {
            $this->Vista->mensaje('Esta Celular ya se encuentra registrado', 'ERROR', 'celular');
        } else if ((isset($data['clave']) or isset($data['repclave'])) and $data['clave'] != $data['repclave']) {
            $this->Vista->mensaje('Esta Clave es Erronea por favor verifique', 'ERROR');
            $this->Vista->monta_imagem('clave', 'Error en clave');
            $this->Vista->monta_imagem('repclave', 'Error en clave');
            $rep = 1;
        } else {
            $d['Funcionario']['id'] = $id_fun;
            $d['Funcionario']['nombre'] = $data['nombre'];
            $d['Funcionario']['apellido'] = $data['apellido'];
            //$d['Funcionario']['cedula'] = $data['cedula'];
            $d['Funcionario']['fecha_nacimiento'] = $this->Utilitario->guar_fecha($ff);
            $d['Funcionario']['sexo'] = $data['sexo'];
            $d['Funcionario']['correo'] = $data['correo'];
            $d['Funcionario']['celular'] = $data['celular'];
            $d['Funcionario']['telefonoresidencial'] = $data['telefono'];
            $d['Funcionario']['ficha'] = $data['ficha'];
            if (isset($data['tienda_id']) && !empty($data['tienda_id']))
                $tienda_id = $data['tienda_id'];
            else
                $tienda_id = $this->Interfaz->id($this->Session->read('tienda_id'));
            $d['Funcionario']['tienda_id'] = $tienda_id;

            $claveAnterior = $this->Utilitario->con_clave($this->request->data['claveAnterior']);
            $resultadoClave = $this->Usuario->find('first', array(
                                                    'conditions' => array('Usuario.id' => $id, 'Usuario.contrasena' => $claveAnterior)));

            if(!empty($resultadoClave)) {
                if ($this->Funcionario->save($d)) {
                    $d = null;
                    $d['Usuario']['id'] = $id;
                    $d['Usuario']['contrasena'] = $this->Utilitario->con_clave($clave);

                    if ($this->Usuario->save($d)) {
                        
                        $this->Vista->mensaje('Datos del Funcionario fueron Modificados Exitosamente', 'EXITO');
                        $this->Usuario->query('COMMIT');
                        $this->log();
                        $this->Vista->cerrar_ventana($id_vent);
                    } else {
                        $this->Vista->mensaje('Ocurrio un Error Verificar Logs', 'ERROR');
                        $this->Usuario->query('ROLLBACK');
                    }
                } else {
                    $this->Vista->mensaje('Ocurrio un Error Verificar Logs', 'ERROR');
                    $this->Usuario->query('ROLLBACK');
                }
            }
            else {
                $this->Vista->mensaje('Contraseña anterior invalida', 'ERROR');
            }
        }

        echo "<script>ajaxsimple('Tp/mini_micuenta/1','cuenta_de_usuario');</script>";

        $this->render("../Tp/mensajes");
    }

    public function ver_tiendas($id_usu) {
        $id_usuario = $this->Interfaz->id($id_usu);
        $data = $this->Usuario->find('first', array(
            'fields' => array('Usuario.id', 'Usuario.usuario', 'Funcionario.nombre', 'Funcionario.apellido'),
            'conditions' => array('Usuario.id' => $id_usuario)));

        $tie = $this->UsuarioPunto->find('all', array('fields' => array('UsuarioPunto.punto_id'), 'conditions' => array('UsuarioPunto.estatus' => 1, 'UsuarioPunto.usuario_id' => $id_usuario)));
        foreach ($tie as $valor) {
            $ids[] = $valor['UsuarioPunto']['punto_id'];
        }
        $listaoperacion[1] = 'ASIGNAR TIENDA';
        $listaoperacion[2] = 'ELIMINAR TIENDA';

        $this->set('listaoperacion', $listaoperacion);
        $this->set('data', $data);
    }

    public function buscar_tiendas_operaciones($u_id, $operacion = null) {
        if (!empty($operacion)) {
            $usuario_id = $this->Interfaz->id($u_id);
            $data = $this->UsuarioPunto->find('all', array('fields' => array('UsuarioPunto.punto_id'), 'conditions' => array('UsuarioPunto.estatus' => 1, 'UsuarioPunto.usuario_id' => $usuario_id)));
            $ids = array();
            $ids[] = 0;
            foreach ($data as $valor) {
                $ids[] = $valor['UsuarioPunto']['punto_id'];
            }
            if ($operacion == 1) {
                if (count($ids) > 1) {
                    $condiciones['TiendaLocal.id not'] = $ids;
                }
                $condiciones['TiendaLocal.estatus'] = 1;
            } else {
                $condiciones['TiendaLocal.id'] = $ids;
            }

            $this->TiendaLocal->virtualFields['nombrecompleto'] = 'TiendaLocal.codigo || \'-\' || TiendaLocal.nombre';
            $listaTiendas = $this->TiendaLocal->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => $condiciones, 'order' => 'TiendaLocal.codigo'));
            if (count($listaTiendas) > 0)
                $listaTiendas[-1] = 'Todas';
            $this->set('listaTiendas', $listaTiendas);
            $this->render("lista_tiendas");
        }
        else {
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
    }

    public function guardar_operacion() {
        if ($this->Vista->empyt($this->request->data)) {
            $this->Vista->mensaje('Faltan Datos que son Requeridos', 'ALERTA');
        } else {
            extract($this->request->data);
            $usuario_id = $this->Interfaz->id($usuario_id);
            if ($tienda_id == -1) {
                $tienda_id = 0;
            }
            if ($operacion == 1) {
                $punto = $this->UsuarioPunto->find('first', array('fields' => array('UsuarioPunto.id'), 'conditions' => array('UsuarioPunto.punto_id' => $tienda_id, 'UsuarioPunto.usuario_id' => $usuario_id)));
                if (isset($punto['UsuarioPunto']['id']))
                    $datPunto['UsuarioPunto']['id'] = $punto['UsuarioPunto']['id'];
                $datPunto['UsuarioPunto']['punto_id'] = $tienda_id;
                $datPunto['UsuarioPunto']['usuario_id'] = $usuario_id;
                $datPunto['UsuarioPunto']['estatus'] = 1;
                $this->UsuarioPunto->save($datPunto);
                $this->Vista->mensaje('Tienda Asignada al Usuario Exitosamente', 'Exito');
            }else {
                if ($tienda_id == 0)
                    $this->UsuarioPunto->updateAll(array('UsuarioPunto.estatus' => 0), array('UsuarioPunto.usuario_id' => $usuario_id));
                else
                    $this->UsuarioPunto->updateAll(array('UsuarioPunto.estatus' => 0), array('UsuarioPunto.usuario_id' => $usuario_id, 'UsuarioPunto.punto_id' => $tienda_id));
                $this->Vista->mensaje('Tienda Eliminada al Usuario Exitosamente', 'Exito');
            }
            //$this->Vista->cerrar_ventana($vent_filtro);
        }
        $this->render("../" . PRINCIPAL . "/mensajes");
    }

}

?>